{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Multi-Modal Genre Classification for Movies\n",
    "### Given:\n",
    "- A data point  xixi \n",
    "- A set of categories  y1,y2...yny1,y2...yn  that  xixi  can belong to. \n",
    "\n",
    "### Task :\n",
    "Predict the correct category **yk**  for a new data point  **xk**  not present in the given dataset.\n",
    "### Problem :\n",
    "We don't know how the  **x**  and  **y**  are related mathematically.\n",
    "### Assumption :\n",
    "We assume there exists a function  ff  relating  xx  and  yy  i.e.  f(xi)=yif(xi)=yi \n",
    "### Approach :\n",
    "Since  ff  is not known, we learn a function  gg , which approximates  ff .\n",
    "### Important consideration :\n",
    "- If  **f(xi)=g(xi)=y**  for all  **xi** , then the two functions  **f** and  **g**  are exactly equal. Needless to say, this won't realistically ever happen, and we'll only be able to approximate the true function  **f**  using  **g** . This means, sometimes the prediction **g(xi)**  will not be correct. And essentially, our whole goal is to find a  **g**  which makes a really low number of such errors. That's basically all that we're trying to do.\n",
    "- For the sake of completeness, I should mention that this is a specific kind of learning problem which we call \"Supervised Learning\". Also, the idea that  gg  approximates  ff  well for data not present in our dataset is called \"Generalization\". It is absolutely paramount that our model generalizes, or else all our claims will only be true about data we already have and our predictions will not be correct.\n",
    "- Finally, There are several other kinds, but supervised learning is the most popular and well studied kind.\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### What's Multi-Modal Classification then?\n",
    "In the machine learning community, the term Multi-Modal is used to refer to multiple kinds of data. For example, consider a YouTube video. It can be thought to contain 3 different modalities -\n",
    "The video frames (visual modality)\n",
    "The audio clip of what's being spoken (audio modality)\n",
    "Some videos also come with the transcription of the words spoken in the form of subtitles (textual modality)\n",
    "Consider, that I'm interested in classifying a song on YouTube as pop or rock. You can use any of the above 3 modalities to predict the genre - The video, the song itself, or the lyrics. But, needless to say, you can predict it much better if you could use all three simultaneously. This is what we mean by multi-modal classification."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  Building your very own DataSet\n",
    "For any machine learning algorithm to work, it is imperative that we collect data which is \"representative\". \n",
    "\n",
    "### What do we mean by data being \"representative\"?\n",
    "Let's look at this from first principles. Mathematically, the premise of machine learning is that given input vairable X, and output variable y, **IF** there is a funcation such that **g(X)=y**, then if **g** is unknown, we can \"learn\" a fun For example, if you're trying to predict someone's movie preferences then X can be information about the person's gender, age, nationality and so on, while y can be the genre they most like to listen to!ction **f** which approximates **g**. At the very heart, its not at all different from what you may have earlier studied as \"curve fitting\". For example, if you're trying to predict someone's movie preferences then X can be information about the person's gender, age, nationality and so on, while y can be the genre they most like to listen to!\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Scraping data from 2 different movie sources - IMDB and TMDB\n",
    "\n",
    "#### IMDB:http://www.imdb.com/\n",
    "For those unaware, IMDB is the primary source of information about movies on the internet. It is immensely rich with posters, reviews, synopsis, ratings and many other information on every movie. We will use this as our primary data source.\n",
    "#### TMDB:https://www.themoviedb.org/\n",
    "TMDB, or The Movie DataBase, is an open source version of IMDB, with a free to use API that can be used to collect information. You do need an API key, but it can be obtained for free by just making a request after making a free account.\n",
    "#### Note -\n",
    "IMDB gives some information for free through the API, but doesn't release other information about movies. Here, we will keep it legal and only use information given to us for free and legally. However, scraping does reside on the moral fence, so to say. People often scrape data which isn't exactly publicly available for use from websites.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import urllib2 \n",
    "import requests \n",
    "import json\n",
    "import imdb\n",
    "import time\n",
    "import itertools\n",
    "import wget\n",
    "import os\n",
    "import tmdbsimple as tmdb\n",
    "import numpy as np \n",
    "import random\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt \n",
    "%matplotlib inline \n",
    "import seaborn as sns\n",
    "import pickle "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Folder already exists\n"
     ]
    }
   ],
   "source": [
    "# set here the path where you want the scrapped folders to be saved!\n",
    "poster_folder = 'posters_final/'\n",
    "if poster_folder.split('/')[0] in os.listdir('./'):\n",
    "    print('Folder already exists')\n",
    "else:\n",
    "    os.mkdir('./' + poster_folder)\n",
    "    print('Folder Created')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# For the purpose of this example, i will be working with the 1999 Sci-Fi movie - \"The Matrix\"!\n",
    "#Enter your own API key here to run the code below. \n",
    "api_key='ced76d9cf645f6f902af7d092bdcacfe'\n",
    "\n",
    "tmdb.API_KEY = api_key\n",
    "\n",
    "#this instantiates a tmdb \"search\" object which allows your to search for the movie\n",
    "search = tmdb.Search() \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Functions goes here\n",
    "def grab_poster_tmdb(movie):\n",
    "    response = search.movie(query=movie)\n",
    "    id=response['results'][0]['id']\n",
    "    movie = tmdb.Movies(id)\n",
    "    posterp=movie.info()['poster_path']\n",
    "    title=movie.info()['original_title']\n",
    "    url='image.tmdb.org/t/p/original'+posterp\n",
    "    title='_'.join(title.split(' '))\n",
    "    strcmd='wget -O '+poster_folder+title+'.jpg '+url\n",
    "    os.system(strcmd)\n",
    "    #print(response['results'])\n",
    "    \n",
    "def get_movie_id_tmdb(movie):\n",
    "    response = search.movie(query=movie)\n",
    "    movie_id=response['results'][0]['id']\n",
    "    return movie_id\n",
    "\n",
    "def get_movie_info_tmdb(movie):\n",
    "    response = search.movie(query=movie)\n",
    "    movie_id=response['results'][0]['id']\n",
    "    movie=tmdb.Movies(movie_id)\n",
    "    info = movie.info()\n",
    "    return info\n",
    "\n",
    "def get_movie_genres_tmdb(movie):\n",
    "    response=search.movie(query=movie)\n",
    "    id=response['results'][0]['id']\n",
    "    movie=tmdb.Movies(id)\n",
    "    genres=movie.info()['genres']\n",
    "    return genres\n",
    "\n",
    "\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "While the above functions have been made to make it easy to get genres, posters and ID, all the information that can be accessed can be seen by calling the function get_movie_info() as shown below.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[{u'id': 18, u'name': u'Drama'}]\n",
      "[{u'id': 28, u'name': u'Action'}, {u'id': 878, u'name': u'Science Fiction'}]\n"
     ]
    }
   ],
   "source": [
    "print get_movie_genres_tmdb('Fight club')\n",
    "print get_movie_genres_tmdb(\"The Matrix\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "All the Movie information from TMDB gets stored in a dictionary with the following keys for easy access -\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[u'poster_path',\n",
       " u'production_countries',\n",
       " u'revenue',\n",
       " u'overview',\n",
       " u'video',\n",
       " u'id',\n",
       " u'genres',\n",
       " u'title',\n",
       " u'tagline',\n",
       " u'vote_count',\n",
       " u'homepage',\n",
       " u'belongs_to_collection',\n",
       " u'original_language',\n",
       " u'status',\n",
       " u'spoken_languages',\n",
       " u'imdb_id',\n",
       " u'adult',\n",
       " u'backdrop_path',\n",
       " u'production_companies',\n",
       " u'release_date',\n",
       " u'popularity',\n",
       " u'original_title',\n",
       " u'budget',\n",
       " u'vote_average',\n",
       " u'runtime']"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "info=get_movie_info_tmdb(\"The Matrix\")\n",
    "print \"All the Movie information from TMDB gets stored in a dictionary with the following keys for easy access -\"\n",
    "info.keys()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "So, to get the tagline of the movie we can use the above dictionary key -"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Matrix Tag Line:Welcome to the Real World.\n"
     ]
    }
   ],
   "source": [
    "print('Matrix Tag Line:' + info['tagline'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Time to get movie information from IMDB\n",
    "Now that we know how to get information from TMDB, here's how we can get information about the same movie from imdb. This makes it possible for us to combine more information, and get a richer dataset. I urge you to try and see what dataset you can make, and go above and beyond the basic things I've done in this tutorial. Due to the differences between the two datasets, you will have to do some cleaning, however both of these datasets are extremely clean and it will be minimal."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "All the information we can get about this movie from IMDB-\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[u'music department',\n",
       " 'sound crew',\n",
       " 'camera and electrical department',\n",
       " u'distributors',\n",
       " 'rating',\n",
       " 'runtimes',\n",
       " 'costume designer',\n",
       " 'make up',\n",
       " 'year',\n",
       " 'production design',\n",
       " 'miscellaneous crew',\n",
       " 'color info',\n",
       " u'casting department',\n",
       " 'languages',\n",
       " 'votes',\n",
       " 'producer',\n",
       " 'title',\n",
       " 'mpaa',\n",
       " 'assistant director',\n",
       " 'writer',\n",
       " 'production manager',\n",
       " 'casting director',\n",
       " 'visual effects',\n",
       " 'top 250 rank',\n",
       " 'set decoration',\n",
       " 'editor',\n",
       " 'certificates',\n",
       " u'costume department',\n",
       " 'country codes',\n",
       " 'language codes',\n",
       " 'cover url',\n",
       " u'special effects department',\n",
       " 'special effects companies',\n",
       " 'sound mix',\n",
       " u'location management',\n",
       " 'genres',\n",
       " 'director',\n",
       " 'stunt performer',\n",
       " 'miscellaneous companies',\n",
       " 'cinematographer',\n",
       " 'art direction',\n",
       " 'akas',\n",
       " 'aspect ratio',\n",
       " u'production companies',\n",
       " 'kind',\n",
       " u'art department',\n",
       " 'countries',\n",
       " u'transportation department',\n",
       " 'plot outline',\n",
       " 'plot',\n",
       " 'cast',\n",
       " u'animation department',\n",
       " 'original music',\n",
       " u'editorial department',\n",
       " 'canonical title',\n",
       " 'long imdb title',\n",
       " 'long imdb canonical title',\n",
       " 'smart canonical title',\n",
       " 'smart long imdb canonical title',\n",
       " 'full-size cover url']"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Create the IMDB object that will be used to access the IMDb's database\n",
    "imdb_object = imdb.IMDb() #by default access the web\n",
    "\n",
    "# Search for a movie (get a list of Movie Objects)\n",
    "results = imdb_object.search_movie('The Matrix')\n",
    "\n",
    "# As this returns a list of all movies containing the word \"The Matrix\", we pick the first element\n",
    "\n",
    "movie = results[0]\n",
    "imdb_object.update(movie)\n",
    "\n",
    "print \"All the information we can get about this movie from IMDB-\"\n",
    "movie.keys()\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The genres associated with the movie are -  [u'Action', u'Sci-Fi']\n"
     ]
    }
   ],
   "source": [
    "print \"The genres associated with the movie are - \",movie['genres']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### A small comparison of IMDB and TMDB \n",
    "Now we have both IMDB and TMDB lets compare them for the same movie"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('The genres for THE MATRIX using IMDB -', [u'Action', u'Sci-Fi'])\n",
      "('The genres for THE MATRIX using TMDB -', [{u'id': 28, u'name': u'Action'}, {u'id': 878, u'name': u'Science Fiction'}])\n"
     ]
    }
   ],
   "source": [
    "print (\"The genres for THE MATRIX using IMDB -\",movie['genres'])\n",
    " \n",
    "print (\"The genres for THE MATRIX using TMDB -\",get_movie_genres_tmdb(\"The Matrix\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As we can see, both the systems are correct, but the way they package information is different. TMDB calls it \"Science Fiction\" and has an ID for every genre. While IMDB calls it \"Sci-Fi\". Thus, it is important to keep track of these things when making use of both the datasets simultaneously.\n",
    "Now that we know how to scrape information for one movie, let's take a bigger step towards scraping multiple movies?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Working with multiple movies : Obtaining Top 20 movies from TMDB\n",
    "We first instantiate an object that inherits from class Movies from TMDB. Then We use the popular() class method (i.e. function) to get top movies. To get more than one page of results, the optional page argument lets us see movies from any specified page number."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20\n"
     ]
    }
   ],
   "source": [
    "all_movies = tmdb.Movies()\n",
    "top_movies=all_movies.popular()\n",
    "\n",
    "print(len(top_movies['results']))\n",
    "top20_movs = top_movies['results']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Despicable Me 3\n",
      "Beauty and the Beast\n",
      "Dawn of the Planet of the Apes\n",
      "Spider-Man: Homecoming\n",
      "War for the Planet of the Apes\n"
     ]
    }
   ],
   "source": [
    "for i in range(len(top20_movs)):\n",
    "    mov=top20_movs[i]\n",
    "    title = mov['title']\n",
    "    print (title)\n",
    "    if i == 4:\n",
    "        break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[12, 16, 35, 10751]\n",
      "[10751, 14, 10749]\n",
      "[878, 28, 18, 53]\n",
      "[28, 12, 878]\n",
      "[28, 12, 18, 878]\n"
     ]
    }
   ],
   "source": [
    "for i in range(len(top20_movs)):\n",
    "    mov=top20_movs[i]\n",
    "    genre = mov['genre_ids']\n",
    "    print (genre)\n",
    "    if i == 4:\n",
    "        break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#Create a tmdb genre object!\n",
    "genres=tmdb.Genres()\n",
    "\n",
    "list_of_genres=genres.list()['genres']\n",
    "#print(list_of_genres)\n",
    "\n",
    "\n",
    "Genre_ID_to_name={}\n",
    "for i in range(len(list_of_genres)):\n",
    "    genre_id=list_of_genres[i]['id']\n",
    "    genre_name=list_of_genres[i]['name']\n",
    "    Genre_ID_to_name[genre_id]=genre_name\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Despicable Me 3 [u'Adventure', u'Animation', u'Comedy', u'Family']\n",
      "Beauty and the Beast [u'Family', u'Fantasy', u'Romance']\n",
      "Dawn of the Planet of the Apes [u'Science Fiction', u'Action', u'Drama', u'Thriller']\n",
      "Spider-Man: Homecoming [u'Action', u'Adventure', u'Science Fiction']\n",
      "War for the Planet of the Apes [u'Action', u'Adventure', u'Drama', u'Science Fiction']\n"
     ]
    }
   ],
   "source": [
    "for i in range(len(top20_movs)):\n",
    "    mov=top20_movs[i]\n",
    "    title=mov['title']\n",
    "    genre = mov['genre_ids']\n",
    "    genre_names = []\n",
    "    for id in genre:\n",
    "        genre_name=Genre_ID_to_name[id]\n",
    "        genre_names.append(genre_name)\n",
    "    print title, genre_names\n",
    "    if i == 4:\n",
    "        break;"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Building a dataset to work with: Let's take a look at the top 1000 movies from the database\n",
    "Making use of the same api as before, we will just pull results from the top 50 pages. As mentioned earler, the \"page\" attribute of the command top_movies=all_movies.popilar() can be used for this purpose."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "all_movies=tmdb.Movies()\n",
    "top_movies=all_movies.popular()\n",
    "\n",
    "#print(top_movies)\n",
    "len(top_movies['results'])\n",
    "top20_movs=top_movies['results']\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pulling movie list, Please wait...\n",
      "1000\n",
      "Done!\n"
     ]
    }
   ],
   "source": [
    "#Comment this code\n",
    "#Saving data in the file\n",
    "#all_movies=tmdb.Movies()\n",
    "#top1000_movies=[]\n",
    "#print('Pulling movie list, Please wait...')\n",
    "\n",
    "#for i in range(1,51):\n",
    "#    if i%15 == 0:\n",
    "#        time.sleep(7)\n",
    "#    movies_on_this_page=all_movies.popular(page=i)['results']\n",
    "#    top1000_movies.extend(movies_on_this_page)\n",
    "#print(len(top1000_movies))\n",
    "#f3 = open('movie_list.pckl','wb')\n",
    "#pickle.dump(top1000_movies,f3)\n",
    "#f3.close()\n",
    "print('Done!')\n",
    "            "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1000\n"
     ]
    }
   ],
   "source": [
    "f3=open('movie_list.pckl','rb')\n",
    "top1000_movies=pickle.load(f3)\n",
    "f3.close()\n",
    "print(len(top1000_movies))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Pairwise analysis of Movie Genres\n",
    "As our dataset is multi-label, simply looking at the distribution of genres is not sufficient. It might be beneficial to see which genres co-occur, as it might shed some light on inherent biases in our dataset. \n",
    "So for the top 1000 movies let's do some pairwise analysis for genre distributions. Our main purpose is to see which genres occur together in the same movie. So, we first define a function which takes a list and makes all possible pairs from it. Then, we pull the list of genres for a movie and run this function on the list of genres to get all pairs of genres which occur together.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Generates all possible pairs of movies \n",
    "def list2pairs(l):\n",
    "    # itertools.combinations(1,2) makes all pairs of length 2 from list l.\n",
    "    pairs=list(itertools.combinations(l,2))\n",
    "    # then the one item pairs, as duplicate pairs aren't accounted for by itertools\n",
    "    for i in l:\n",
    "        pairs.append([i,i])\n",
    "    return pairs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As mentioned, now we will pull genres for each movie, and use above function to count occurrences of when two genres occurred together"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "# get all genre list\n",
    "allPairs =[]\n",
    "for movie in top1000_movies:\n",
    "    allPairs.extend(list2pairs(movie['genre_ids']))\n",
    "\n",
    "nr_ids = np.unique(allPairs)\n",
    "visGrid = np.zeros((len(nr_ids), len(nr_ids)))\n",
    "for p in allPairs:\n",
    "    visGrid[np.argwhere(nr_ids==p[0]), np.argwhere(nr_ids==p[1])]+=1\n",
    "    if p[1] != p[0]:\n",
    "        visGrid[np.argwhere(nr_ids==p[1]), np.argwhere(nr_ids==p[0])]+=1\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's take a look at the structure we just made. It is a 19X19 structure, as shown below. Also, see that we had 19 Genres. Needless to say, this structure counts the number of simultaneous occurrences of genres in same movie."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(19, 19)\n",
      "19\n"
     ]
    }
   ],
   "source": [
    "print (visGrid.shape)\n",
    "print(len(Genre_ID_to_name.keys()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7fc19b9baa50>"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n/vKXvzjy4xARESfh6F56QThtz75Fixb25L5lyxZat26NzWYjPT2dzZs307JlS95++20++ugjPv/8\ncypUqMBXX440AAAgAElEQVTKlSvZsGEDFStWJCoqivfee4+zZ8/y7LPPUqtWLcaMGcPy5cvx9fUl\nKiqKGTNmMH78ePt71q1bl9GjRwOQlJTErFmzGDlyJIsWLXLIZyAiImKC0yb7smXL4uXlRVJSEgkJ\nCQQGBtKoUSPi4+PZsmUL999/P0eOHOHFF18kNDSUTZs2kZSUROPGjYmPj2f06NEcOXKEtm3bXhd3\n+/btrFmzhtDQUF566SUyMjLIzMwE/lfLHqBp06YAVKpUibS0tLt34SIiIoY57TA+XBnKX7duHRaL\nheLFi9OsWTO2b9/OL7/8whtvvIGfnx9RUVE3nLd06VI2bdrEggULiI+Pp0ePHvbXPDw8GDx4MN26\ndbvhPI9riqG4m9qsRUREihQXHMV33p49XEn2ixYtonHjxgA0a9aMf//73/j6+uLn5wfAr7/+CkBU\nVBR79+5l/fr1rF+/noceeoiIiAh27tyJ1WrFZrtSLSowMJA1a9YAcPbsWaZMmeKAKxMREVflivXs\nnTrZt2jRgl27dtlX3VeoUIHU1FRatmwJwDvvvMPw4cPp378/W7dupXbt2tSoUYNPPvmE0NBQe816\nX19fsrKyCAsL49FHH8XLy4u+ffsyePDgPK/oFxERAddcja969oakn/3NSByTddVN7n+dk51tLJaz\nXqMxBv+rLvJ74zv6N+C9yuR/N076b1iY9eyXhk0r0HmPf/ii4ZbknVP37EVEROSPU7IXEREp4rTk\nXEREJB+cdObitpTsDbl4+LCROCUqVzQSB8C9VGljsU6s2WgsVtl6VYzFOrr2v0bi1B/Q0UgcAIub\nuQEzk/Psw5+YaCzW6xGPGolTvmmgkTgAqb/sMhbL6mnuV2Pp++83FsuWkW4kjlux4kbiAORkZRmL\nZXQ9TyFyxR30lOxFRETywQVzvZK9iIhIfrhiz14L9ERERIo4l+zZv/vuu+zatYvTp09z+fJlatSo\nQZkyZThx4gSxsbG3PG/t2rUkJibStm1bwsLCiI2NpX379ixfvpySJUvexSsQERFX5YIde9dM9uHh\n4QDExsayf/9+hg0bRmJiImFhYbc972pRnMTExEJvo4iIiLNwyWR/K7m5ubz55pv88ssvNGjQgHHj\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc19b9d0050>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "annot_lookup=[]\n",
    "for i in xrange(len(nr_ids)):\n",
    "    annot_lookup.append(Genre_ID_to_name[nr_ids[i]])\n",
    "\n",
    "sns.heatmap(visGrid,xticklabels=annot_lookup,yticklabels=annot_lookup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The above image shows how often the genres occur together, as a heatmap\n",
    "Important thing to notice in the above plot is the diagonal. The diagonal corresponds to self-pairs, i.e. number of times a genre, say Drama occurred with Drama. Which is basically just a count of the total times that genre occurred!\n",
    "As we can see there are a lot of dramas in the data set, it is also a very unspecific label. There are nearly no documentaries or TV Movies. Horror is a very distinct label, and romance is also not too widely spread.\n",
    "To account for this unbalanced data, there are multiple things we can try to explore what interesting relationships can be found."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.cluster import SpectralCoclustering"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc19e671e10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model = SpectralCoclustering(n_clusters=5)\n",
    "model.fit(visGrid)\n",
    "fit_data = visGrid[np.argsort(model.row_labels_)]\n",
    "fit_data = fit_data[:,np.argsort(model.column_labels_)]\n",
    "\n",
    "annot_lookup_sorted =[]\n",
    "for i in np.argsort(model.row_labels_):\n",
    "    annot_lookup_sorted.append(Genre_ID_to_name[nr_ids[i]])\n",
    "\n",
    "sns.heatmap(fit_data,xticklabels=annot_lookup_sorted,yticklabels=annot_lookup_sorted, annot=False)\n",
    "plt.title(\"After biclustering; rearranged to show biclusters\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Looking at the above figure, \"boxes\" or groups of movie genres automatically emerge!\n",
    "Intuitively - Sci-Fic, Adventure, Action,Comedy, Family, Drama, Thriller, etc co-occur. AND, Comedy, Animation,Fantasy, Action etc co-occur.\n",
    "That makes a lot of intuitive sense, right?\n",
    "One challenge is the broad range of the drama genre. It makes the two clusters highly overlapping. If we merge it together with action thriller, etc. We will end up with nearly all movies just having that label.\n",
    "\n",
    "**Based on playing around with the stuff above, we can sort the data into the following genre categories - \"Drama, Action, ScienceFiction, exciting(thriller, crime, mystery), uplifting(adventure, fantasy, animation, comedy, romance, family), Horror, History\"**\n",
    "\n",
    "Note: that this categorization is subjective and by no means the only right solution. One could also just stay with the original labels and only exclude the ones with not enough data. Such tricks are important to balance the dataset, it allows us to increase or decrease the strength of certain signals, making it possible to improve our inferences :)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
